<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2019/9/4
 * Time: 22:46
 */

namespace Zch\LishangLaravelShop\Data\Goods\Util;

class ObserverUtil
{
    // $observes 批量注册
    // 1. 判断是否自定义传递参数
    // 2. 去注册
    //    2.1 自定传参的方式注册流程 - 无需复杂操作
    //    2.2 配置方式批量注册
    //        2.2.1 先获取定义的配置文件中的注册信息
    //        2.2.2 循环注册
    //              2.2.2.1  判断model是否存在
    //              2.2.2.2  判断observe是否存在
    //              2.2.2.3  注册
    public static function observes(array $observes = null)
    {
        // 知道是要知道批量注册的观察者的事件是在那个配置文件中
        // $observe_config = config('data.goods-extend.observe_config');

        // 1. 分析代码作用
        // 2. 找共同
        // 3. 拆分
        // $modelObserves = [];
        if (!empty($observes)) {
            static::registerObserve($observes);
        } else {
            // 执行配置文件中的
            foreach (config('data.goods-observer.observe_config') as $config) {
                static::registerObserve($config);
            }
        }
    }

    private static function registerObserve($observes = null)
    {
        //print_r(config($observes.'.observers'));die;
        foreach ((is_array($observes) ? $observes : config($observes.'.observers')) as $model => $observe) {
            $model = static::getModelOrObserveClass($model, $observes, 'model');
            $observe = static::getModelOrObserveClass($observe, $observes, 'observe');
            //echo $observe;die;
            $model::observe($observe);
        }
    }

    private static function getModelOrObserveClass($class, $config, $type)
    {
        return (class_exists($class)) ? $class :  config($config.'.namespace.'.$type).'\\'.$class;
    }
}